package com.hangim.hangimsia.common.persistence.dao;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.util.List;
import java.util.Map;

/**
 * BaseDao
 * <p>
 * 基于Spring JDBC的Dao顶层基类，封装一些JDBC相关的基本操作。
 */
public interface BaseDao {
    /**
     * 获取数据库元数据
     *
     * @return DatabaseMetaData
     */
    DatabaseMetaData getDatabaseMetaData();

    /**
     * 获取数据库类型
     *
     * @return String 数据库类型
     */
    String getDatabaseType();

    /**
     * 创建简单临时表
     *
     * @param data 临时数据
     * @return String 临时表名
     */
    String createTempTable(List<Long> data);

    /**
     * 创建临时表
     *
     * @param nameTypeMap 表结构定义
     * @return String 临时表名
     */
    String createTempTable(Map<String, String> nameTypeMap, List<Map<String, Object>> data);

    /**
     * 移除临时表
     *
     * @param temporaryTableName 临时表名
     */
    boolean dropTemporaryTable(String temporaryTableName);

    /**
     * 获取Spring管理到数据库连接
     * 调用DataSourceUtils.getConnection()来获取链接，这样可以保证处于当前事务中。
     */
    Connection getConnection();

    /**
     * 释放Spring管理到数据库连接
     * 调用DataSourceUtils.releaseConnection()来释放链接，这样可以保证处于当前事务中。
     */
    void releaseConnection(Connection con);

}
